home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / 3dvect37.zip / DXF23DV3.ZIP / R3DF.ASM < prev    next >
Assembly Source File  |  1994-06-22  |  8KB  |  332 lines

  1. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  2. ; DXF "Remove 3DFaces"
  3. ;
  4. ; Lets say you have a 3d object from some bulletin board, but the 3dfaces
  5. ; are all screwed up.  Use this utility to remove any 3dfaces but keep the
  6. ; wireframe.  After I wrote this, I realized you can do this from  AUTOCAD
  7. ; by just selecting ERASE 3DFACE ALL  ... oh, well...
  8. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  9.  
  10. ; Link this with PMODE, FILE, and ARGC
  11.  
  12.           .386p
  13.           jumps
  14.  
  15. code32    segment para public use32
  16.           assume cs:code32, ds:code32, ss:code32
  17.  
  18.           include pmode.ext
  19.           include file.ext
  20.           include argc.ext
  21.  
  22.           public  _main
  23.  
  24. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  25. ; Macros
  26. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  27.  
  28. upper     macro regx  ; make register uppercase
  29.           local strl
  30.           cmp regx,"a"
  31.           jb short strl
  32.           cmp regx,"z"
  33.           ja short strl
  34.           sub regx,"a"-"A"
  35. strl:
  36.           endm
  37.  
  38. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  39. ; DATA
  40. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  41.  
  42. inputname       db 60 dup (?)
  43. outputname      db 60 dup (?)
  44.  
  45. buffer          db 60 dup (?)
  46. fileloc         dd 0
  47.  
  48. dxfo            dd 0      ; start dxf file location
  49. dxfsize         dd 0      ; dxf filesize
  50.  
  51. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  52. ; CODE
  53. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  54.  
  55. include extras.rt
  56.  
  57. errmsg0         db 10,13,'Missing Filename!',0dh,0ah,"$"
  58. errmsg1         db 10,13,'Not Enough Memory!',0dh,0ah,"$"
  59. errmsg2         db 10,13,'Error Opening File!',0dh,0ah,"$"
  60. okmsg           db 10,13,"Bye!",10,13,"$"
  61.  
  62. exiterr0:
  63.         mov edx,offset errmsg0
  64.         call _putdosmsg
  65.         jmp okerr0
  66. exiterr1:
  67.         mov edx,offset errmsg1
  68.         call _putdosmsg
  69.         jmp okerr0
  70. exiterr2:
  71.         mov edx,offset errmsg2
  72.         call _putdosmsg
  73.         jmp okerr0
  74. okerr0:
  75.         mov edx,offset okmsg
  76.         call _putdosmsg
  77.         jmp _exit
  78.  
  79. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  80. ; Allocate memory
  81. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  82. _main:
  83.         call _setbuf
  84.  
  85. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  86. ; Parse and open DXF, allocate memory, load DXF, close file
  87. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  88.  
  89.         xor al,al
  90.         mov edx,offset inputname
  91.         call _cchekstr
  92.         jc exiterr0
  93.         mov edx,offset inputname
  94.         call _openfile
  95.         jc exiterr2
  96.         call _filesize
  97.         mov dxfsize,eax
  98.         call _getlomem
  99.         jc exiterr1
  100.         mov dxfo,eax
  101.         mov fileloc,eax
  102.         mov edx,eax
  103.         mov ecx,dxfsize
  104.         call _readfile
  105.         jc exiterr2
  106.         call _closefile
  107.  
  108. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  109. ; Parse and open output filename
  110. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  111.  
  112.         mov al,1                        ; check for filename on commandline
  113.         mov edx,offset outputname
  114.         call _cchekstr
  115.         jc exiterr0
  116.         mov edx,offset outputname
  117.         call _createfile
  118.         jc exiterr0
  119.  
  120. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  121. ; Write new DXF file without 3dfaces
  122. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  123.  
  124.         mov edi,dxfo
  125.         mov ebp,edi
  126.         add ebp,dxfsize
  127.         mov dxfsize,ebp
  128.  
  129. outloop:
  130.         mov fileloc,edi
  131.         mov edx,offset tag1
  132.         mov ebp,dxfsize
  133.         call search_string
  134.         jc done
  135.  
  136.         push edi
  137.         mov edx,fileloc
  138.         mov ecx,edi
  139.         sub ecx,edx
  140.         cmp ecx,0
  141.         je end2end
  142.         call _writefile
  143. end2end:
  144.         pop edi
  145.  
  146.         mov edx,offset tag2
  147.         mov ebp,dxfsize
  148.         call search_string
  149.         jc exiterr0
  150.  
  151.         mov edx,offset tag3
  152.         mov ebp,dxfsize
  153.         call search_string
  154.         jc exiterr0
  155.  
  156.         mov edx,offset tag4
  157.         mov ebp,dxfsize
  158.         call search_string
  159.         jc exiterr0
  160.  
  161.         mov edx,offset tag5
  162.         mov ebp,dxfsize
  163.         call search_string
  164.         jc exiterr0
  165.  
  166.         mov edx,offset tag6
  167.         mov ebp,dxfsize
  168.         call search_string
  169.         jc exiterr0
  170.  
  171.         mov edx,offset tag7
  172.         mov ebp,dxfsize
  173.         call search_string
  174.         jc exiterr0
  175.  
  176.         mov edx,offset tag8
  177.         mov ebp,dxfsize
  178.         call search_string
  179.         jc exiterr0
  180.  
  181.         mov edx,offset tag9
  182.         mov ebp,dxfsize
  183.         call search_string
  184.         jc exiterr0
  185.  
  186.         mov edx,offset taga
  187.         mov ebp,dxfsize
  188.         call search_string
  189.         jc exiterr0
  190.  
  191.         mov edx,offset tagb
  192.         mov ebp,dxfsize
  193.         call search_string
  194.         jc exiterr0
  195.  
  196.         mov edx,offset tagc
  197.         mov ebp,dxfsize
  198.         call search_string
  199.         jc exiterr0
  200.  
  201.         mov edx,offset tagd
  202.         mov ebp,dxfsize
  203.         call search_string
  204.         jc exiterr0
  205.  
  206.         mov edx,offset tage
  207.         mov ebp,dxfsize
  208.         call search_string
  209.         jc exiterr0
  210.  
  211.         mov edx,offset tagf ; yeah, it should have been a loop but who gives a shit!
  212.         mov ebp,dxfsize
  213.         call search_string
  214.         jc exiterr0
  215.         call next
  216.  
  217.         jmp outloop
  218. done:
  219.         mov edx,fileloc
  220.         mov ecx,dxfsize
  221.         sub ecx,edx
  222.         cmp ecx,0
  223.         je outq
  224.         call _writefile
  225. outq:
  226.         call _closefile
  227.         jmp _exit
  228.  
  229. tag1    db "3DFACE",0
  230. tag2    db " 8",0
  231. tag3    db " 10",0
  232. tag4    db " 20",0
  233. tag5    db " 30",0
  234. tag6    db " 11",0
  235. tag7    db " 21",0
  236. tag8    db " 31",0
  237. tag9    db " 12",0
  238. taga    db " 22",0
  239. tagb    db " 32",0
  240. tagc    db " 13",0
  241. tagd    db " 23",0
  242. tage    db " 33",0
  243. tagf    db " 0",0
  244.  
  245. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  246. ; Unpad string
  247. ; In:  EDI => string eg " , Hello th"
  248. ; Out: EDI => string (after spaces, colons, whatever) eg "Hello th"
  249. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  250. unpad:
  251.         dec edi
  252. upx:
  253.         inc edi
  254.         mov al,[edi]
  255.         cmp al,"A"
  256.         jae upretx
  257.         cmp al,"9"
  258.         ja upx
  259.         cmp al,31
  260.         jb upx
  261. upretx:
  262.         ret
  263.  
  264. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  265. ; Next string
  266. ; In:  EDI => string eg "Hello there mi"
  267. ; Out: EDI => next string (after spaces, colons, whatever) eg "there mi"
  268. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  269. next:
  270.         call unpad
  271.         dec edi
  272. nxc:
  273.         inc edi
  274.         mov al,[edi]
  275.         cmp al,"A"
  276.         jae nxc
  277.         cmp al,"9"
  278.         ja nxretc
  279.         cmp al,31
  280.         jae nxc
  281. nxretc:
  282.         jmp unpad
  283.  
  284. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  285. ; Search_string: Find string at EDX in DXF file
  286. ; In:
  287. ;   EDX => ASCIIZ string to search for (DXF)
  288. ;   EDI = location to start search
  289. ;   EBP = location to end search
  290. ; Out:
  291. ;  CF = 1 - not found
  292. ;  CF = 0 - found
  293. ;   EDI = location where found
  294. ; Notes: String at EDI must have a space or zero at end for search tp succeed.
  295. ;  eg:  EDX => "HELLO",0
  296. ;       EDI => "ABCDHELLOEFGI" will FAIL! - but " ABCDHELLO DKJ" will succeed!
  297. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  298.  
  299. search_string:
  300.         mov esi,edx
  301.         mov ecx,edi
  302. ssloop:
  303.         mov al,[esi]
  304.         mov ah,[ecx]
  305.         upper al
  306.         upper ah
  307.         inc esi
  308.         inc ecx
  309.         cmp al,ah
  310.         je ssloop
  311.  
  312.         cmp al,0
  313.         jne ssabort
  314.  
  315.         cmp ah,"."
  316.         jae ssabort
  317.  
  318.         clc
  319.         ret
  320. ssabort:
  321.         cmp ecx,ebp
  322.         jae ssretx
  323.  
  324.         inc edi
  325.         jmp search_string
  326. ssretx:
  327.         stc
  328.         ret
  329.  
  330. code32  ends
  331.         end
  332.